package com.ctb.dao;
/*
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
*/
import java.io.IOException;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.MissingResourceException;

import org.apache.log4j.Logger;

import oracle.jdbc.OracleTypes;
import utiles.AppProperties;
import utiles.ConexionPool;
import utiles.utilitarios;


import com.ctb.dto.DocumentoDteDTO;
import com.ctb.dto.DocumentoReferenciaDTO;
import com.ctb.vo.DocumentoDteVO;
import com.ctb.vo.DocumentoDetalleDteVO;
import com.ctb.vo.DocumentoReferenciaVO;
import com.ctb.vo.ReferenciaDteVO;
/* --- */
//import com.dte.dao.DocumentoElectronicoDAO;
import com.dte.dao.GuiaDespachoDAO;
import com.dte.dto.GuiaDatosEnvDTE;
import com.dte.dto.GuiaDespRptaDTE;
import com.dte.vo.DetalleVO;
import com.dte.vo.EmisorVO;
import com.dte.vo.EncabezadoVO;
import com.dte.vo.ObservacionVO;
import com.dte.vo.ReceptorVO;
import com.dte.vo.TotalesVO;
import com.dte.vo.TransporteVO;
import com.far.dto.DocumentoDetalleDTO;
import com.liquid_technologies.ltxmllib8.exceptions.LtException;

public class DocumentoElectronicoDAO {
	private static Logger log = Logger.getLogger(DocumentoElectronicoDAO.class);
	String pkgVar = (AppProperties.getProperty("aplicacion", "PACKAGE"));
	String horaActual = utilitarios.getFechaHoraActual(); //utilitarios.getHoraActual();


	public  List<DocumentoDteDTO> setDocumentoEncabezado(DocumentoDteVO documentoVo) throws SQLException, IOException{

		Connection conn = ConexionPool.getConnectionPool();	

		List<DocumentoDteDTO> listRetorno = new ArrayList<DocumentoDteDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.setDocumentoEncabezado(?,?,?,?,?, ?,?,?,?,?, ?,?,?,?,?, ?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, documentoVo.getIdCliente());
			stmt.setString(2, documentoVo.getIdDocumento());
			stmt.setString(3, documentoVo.getIdSede());
			stmt.setString(4, documentoVo.getSubTotal());
			stmt.setString(5, documentoVo.getDescuento());
			stmt.setString(6, documentoVo.getNeto());
			stmt.setString(7, documentoVo.getIvaPct());
			stmt.setString(8, documentoVo.getIva());
			stmt.setString(9, documentoVo.getTotal());
			stmt.setString(10, documentoVo.getFecha());
			stmt.setString(11, documentoVo.getIdTipoDoc());
			stmt.setString(12, documentoVo.getObser());
			stmt.setString(13, documentoVo.getIdUser());
			stmt.setString(14, documentoVo.getIdTipoTrans());
			stmt.setString(15, documentoVo.getCondCompra());
			stmt.setString(16, documentoVo.getNroOC());
			stmt.registerOutParameter(17, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(17);
			while (rs.next()) {
				DocumentoDteDTO documDTO = new DocumentoDteDTO();
				documDTO.setIdDocumento(rs.getString(2)); 		
				documDTO.setSii(rs.getString(3)); 		
				listRetorno.add(documDTO);		    	
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error(horaActual+" Error DocumentoElectronicoDAO.setDocumentoEncabezado SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {			
			conn.close();
			conn = null;
		}
		return listRetorno;
	}
	public  List<DocumentoDteDTO> setDocumentoDetalle(DocumentoDetalleDteVO documentoDetVo) throws SQLException, IOException{

		Connection conn = ConexionPool.getConnectionPool();	

		List<DocumentoDteDTO> listRetorno = new ArrayList<DocumentoDteDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.setDocumentoDetalle(?,?,?,?,?,?,?,?,?,?) }";
			//System.out.println("Precio:"+documentoDetVo.getPrecioListaNeto()+"fin");
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, documentoDetVo.getIdDocumento());		
			stmt.setString(2, documentoDetVo.getKinf());
			stmt.setString(3, documentoDetVo.getPresentacion());
			stmt.setString(4, documentoDetVo.getCant());
			stmt.setString(5, documentoDetVo.getPrecioListaNeto());
			stmt.setString(6, documentoDetVo.getPercenGratuidad());
			stmt.setString(7, documentoDetVo.getTotalNeto());
			stmt.setString(8, documentoDetVo.getDetalle());
			stmt.setString(9, documentoDetVo.getDescripcion());
			stmt.registerOutParameter(10, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(10);
			while (rs.next()) {
				DocumentoDteDTO documDTO = new DocumentoDteDTO();
				documDTO.setIdDetDocumento(rs.getString(2)); 	
				//System.out.println("ID Doc Det:"+rs.getString(2));
				listRetorno.add(documDTO);		    	
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error(horaActual+" Error DocumentoElectronicoDAO.setDocumentoDetalle SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {			
			conn.close();
			conn = null;
		}
		return listRetorno;
	}
	public  List<DocumentoDteDTO> setDocumentoReferencia(ReferenciaDteVO referenciaVO) throws MissingResourceException, IOException, SQLException{
		Connection conn = ConexionPool.getConnectionPool();	       
		List<DocumentoDteDTO> listRetorno = new ArrayList<DocumentoDteDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.setDocumentoReferencia(?,?,?,?,?,?,?,?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);
			stmt.setString(1, referenciaVO.getIdDocumentoRef());		
			stmt.setString(2, referenciaVO.getIdDocumentoEnc());
			stmt.setString(3, referenciaVO.getIdTipoDoc());
			stmt.setString(4, referenciaVO.getFolioReferencia());
			stmt.setString(5, referenciaVO.getFechaEmis());
			stmt.setString(6, referenciaVO.getIdContrato());
			stmt.setString(7, referenciaVO.getIdsede());
			stmt.setString(8, referenciaVO.getMonto());
			stmt.registerOutParameter(9, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(9);
			while (rs.next()) {
				DocumentoDteDTO documDTO = new DocumentoDteDTO();
				documDTO.setIdDocumento(rs.getString(1)); 							
				listRetorno.add(documDTO);		    	
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error(horaActual+" Error DocumentoElectronicoDAO.setDocumentoReferencia SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {			
			conn.close();
			conn = null;
		}
		
		
	 return listRetorno;	
		
	}

	public  List<DocumentoDteDTO> setEnviarGuia(String idDocumento) throws MissingResourceException, IOException, SQLException{
		int enviar = setEnviarGuiaSII(idDocumento);	
		Connection conn = ConexionPool.getConnectionPool();	       
		List<DocumentoDteDTO> listRetorno = new ArrayList<DocumentoDteDTO>();
		try {
		
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.setEstadoDocumentoSII(?,?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);			
			stmt.setString(1, idDocumento);	
			stmt.setString(2, Integer.toString(enviar));	
			stmt.registerOutParameter(3, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(3);
			while (rs.next()) {
				DocumentoDteDTO documDTO = new DocumentoDteDTO();
				documDTO.setIdEstado(rs.getString(1));
				documDTO.setEstado(rs.getString(2));
				listRetorno.add(documDTO);		    	
			}
			rs.close();
			stmt.close();

		} catch (SQLException ex) {  
			log.error(horaActual+" Error DocumentoElectronicoDAO.setEnviarGuia SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {			
			conn.close();
			conn = null;
		}
		
		
	 return listRetorno;	
	}
	
	public int setEnviarGuiaSII(String idDocumento) throws MissingResourceException, IOException, SQLException{
		int resultado = 6;
		int montoDocRef = 0;
		String folioSii = "0";
		Connection conn = ConexionPool.getConnectionPool();	
		
		GuiaDatosEnvDTE guiaDatosEnvDTE = new GuiaDatosEnvDTE();
		List<GuiaDatosEnvDTE> listRetorno = new ArrayList<GuiaDatosEnvDTE>();
		try {
			
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.getGuiaDespachoEncParaSII(?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);			
			stmt.setString(1, idDocumento);	
			stmt.registerOutParameter(2, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(2);
			while (rs.next()) {				
				guiaDatosEnvDTE.setFechaEmision(rs.getString(1));
				guiaDatosEnvDTE.setFechaVencimiento(rs.getString(2)); 
				guiaDatosEnvDTE.setRutEmisor(rs.getString(3)); 
				guiaDatosEnvDTE.setRazonSocialEmisor(rs.getString(4)); 
				guiaDatosEnvDTE.setGiroEmisor(rs.getString(5));
				guiaDatosEnvDTE.setActecoEmisor(rs.getString(6));
				guiaDatosEnvDTE.setTelefonoEmisor(rs.getString(7));
				guiaDatosEnvDTE.setDireccionEmisor(rs.getString(8));
				guiaDatosEnvDTE.setComunaEmisor(rs.getString(9));
				guiaDatosEnvDTE.setCiudadEmisor(rs.getString(10));
				guiaDatosEnvDTE.setRutCliente(rs.getString(11));
				guiaDatosEnvDTE.setRazonSocialCliente(rs.getString(12));
				guiaDatosEnvDTE.setGiroCliente(rs.getString(13));
				guiaDatosEnvDTE.setContactoEmpresaCliente(rs.getString(14));
				guiaDatosEnvDTE.setEmailCliente(rs.getString(15));
				guiaDatosEnvDTE.setDireccionCliente(rs.getString(16));
				guiaDatosEnvDTE.setComunaCliente(rs.getString(17));
				guiaDatosEnvDTE.setComunaPostalCliente(rs.getString(18));
				guiaDatosEnvDTE.setCiudadCliente(rs.getString(19));
				guiaDatosEnvDTE.setSubtotal(rs.getString(20));
				guiaDatosEnvDTE.setDescuento(rs.getString(21));
				guiaDatosEnvDTE.setNetoTotal(rs.getString(22));
				guiaDatosEnvDTE.setPorcentajeIVA(rs.getString(23));
				guiaDatosEnvDTE.setIva(rs.getString(24));
				guiaDatosEnvDTE.setTotal(rs.getString(25));
				guiaDatosEnvDTE.setFolioDoc(rs.getString(26));
				folioSii=rs.getString(26);
				guiaDatosEnvDTE.setTipoDoc(rs.getString(27));
				guiaDatosEnvDTE.setObser(rs.getString(28));
				guiaDatosEnvDTE.setIdTipoTrans(rs.getString(29));
				guiaDatosEnvDTE.setCondCompra(rs.getString(30));
				guiaDatosEnvDTE.setNroOC(rs.getString(31));
				listRetorno.add(guiaDatosEnvDTE);	
				//System.out.println("rescato folio:"+folioSii);
				
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error(horaActual+" Error DocumentoElectronicoDAO.setEnviarGuiaSII(1) Encabezado SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
			resultado = 6;
		} 
		
		//return listRetorno;
		
		
		List<DocumentoDetalleDTO> listRetornoDet = new ArrayList<DocumentoDetalleDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.getGuiaDespachoDetParaSII(?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);			
			stmt.setString(1, idDocumento);	
			stmt.registerOutParameter(2, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(2);
			while (rs.next()) {
				DocumentoDetalleDTO documDetDTO = new DocumentoDetalleDTO();
				documDetDTO.setIdDocumentoDetalle(rs.getString(1));
				documDetDTO.setIdDocumento(rs.getString(2)); 
				documDetDTO.setKinf(rs.getString(3)); 
				documDetDTO.setPresentacion(rs.getString(4)); 
				documDetDTO.setCantidad(rs.getString(5));
				documDetDTO.setPrecioListaNeto(rs.getString(6));
				documDetDTO.setDescuentoMonto(rs.getString(7));
				documDetDTO.setTotalNeto(rs.getString(8));
				documDetDTO.setDescripcion(rs.getString(9));
			//	documDetDTO.setNetoListaTotal(rs.getString(10));
			//	documDetDTO.setPercenGratuidadTotal(rs.getString(11));
			//	documDetDTO.setNetoTotal(rs.getString(12));
				documDetDTO.setDescripcionItem(rs.getString(10));
				//System.out.println("rescato idDet:"+rs.getString(1));
				listRetornoDet.add(documDetDTO);				
				
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error DocumentoElectronicoDAO.setEnviarGuiaSII(2) Detalle SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		
		}
		
		//    Seteo List de Documento de referencia
		List<DocumentoReferenciaDTO> listRetornoRef = new ArrayList<DocumentoReferenciaDTO>();
		try {
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.getGuiaDespachoRefParaSII(?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);			
			stmt.setString(1, idDocumento);	
			stmt.registerOutParameter(2, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(2);
			while (rs.next()) {
				DocumentoReferenciaDTO documRefDTO = new DocumentoReferenciaDTO();
				documRefDTO.setTipoDocRef(rs.getString(1));
				documRefDTO.setFolioRef(rs.getString(2));
				documRefDTO.setFechaRef(rs.getString(3));
				documRefDTO.setMonto(rs.getString(4));
				montoDocRef= montoDocRef+Integer.parseInt(rs.getString(4));
				listRetornoRef.add(documRefDTO);						
			}
			rs.close();
			stmt.close();
		} catch (SQLException ex) {  
			log.error("Error DocumentoElectronicoDAO.setEnviarGuiaSII(3) Referencias SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {			
			conn.close();
			conn = null;
		}	
		
		List<DocumentoReferenciaVO> detalleRefList = new ArrayList<DocumentoReferenciaVO>();
		if (listRetornoRef.size() > 0){					
				for (int i = 0; i < listRetornoRef.size(); i++){
					DocumentoReferenciaDTO  documentoRefeDTO = (DocumentoReferenciaDTO) listRetornoRef.get(i);	
					DocumentoReferenciaVO  referenciaVO = new DocumentoReferenciaVO(); 
					referenciaVO.setNroLinea(String.valueOf(i));
					referenciaVO.setTipoDocRef(documentoRefeDTO.getTipoDocRef());
					referenciaVO.setFolioRef(documentoRefeDTO.getFolioRef());
					referenciaVO.setFechaRef(documentoRefeDTO.getFechaRef());
					referenciaVO.setCodRef("0");
					if (guiaDatosEnvDTE.getTipoDoc().equals("NCC")||guiaDatosEnvDTE.getTipoDoc().equals("NDC")){
						//System.out.println("neto:"+guiaDatosEnvDTE.getNetoTotal()+"; ref:"+montoDocRef);
						if (Integer.parseInt(guiaDatosEnvDTE.getNetoTotal())==0)
							referenciaVO.setCodRef("2");
						else if (Integer.parseInt(guiaDatosEnvDTE.getNetoTotal())==montoDocRef)
							referenciaVO.setCodRef("1");
						else if (Integer.parseInt(guiaDatosEnvDTE.getNetoTotal())<montoDocRef)
							referenciaVO.setCodRef("3");
						
					}
					//System.out.println("Cod"+referenciaVO.getCodRef());
					detalleRefList.add(referenciaVO);
				}					
		}
		//System.out.println("registros Seteados en Detalle Refer List:"+ detalleRefList.size());
		
		
		
		
		//System.out.println("registro de encabezados > 0 si hay"+listRetorno.size());
		
	   if (listRetorno.size() > 0){
		   //System.out.println("2:");
			//Encabezado
			GuiaDespachoDAO envia = new GuiaDespachoDAO();
			EncabezadoVO encabezadoVO = new EncabezadoVO();
			encabezadoVO.setFechaEmis(guiaDatosEnvDTE.getFechaEmision());
			encabezadoVO.setFechaVenc(guiaDatosEnvDTE.getFechaVencimiento());
			encabezadoVO.setFolio(guiaDatosEnvDTE.getFolioDoc());
			encabezadoVO.setTipoDoc(guiaDatosEnvDTE.getTipoDoc());
			encabezadoVO.setIdTipoTrans(guiaDatosEnvDTE.getIdTipoTrans());
			//Receptor
			ReceptorVO receptorVO = new ReceptorVO();
			receptorVO.setRutReceptor(guiaDatosEnvDTE.getRutCliente());
			receptorVO.setRazonSocialReceptor(guiaDatosEnvDTE.getRazonSocialCliente());
			receptorVO.setContactoReceptor(guiaDatosEnvDTE.getContactoEmpresaCliente());
			receptorVO.setCorreoReceptor(guiaDatosEnvDTE.getEmailCliente());
			receptorVO.setDireccionReceptor(guiaDatosEnvDTE.getDireccionCliente());
			receptorVO.setGiroReceptor(guiaDatosEnvDTE.getGiroCliente());
			receptorVO.setComunaReceptor(guiaDatosEnvDTE.getComunaCliente());		
			receptorVO.setCiudadReceptor(guiaDatosEnvDTE.getCiudadCliente());
			receptorVO.setCmnaPostalReceptor(guiaDatosEnvDTE.getComunaPostalCliente());
		    // Transporte
			TransporteVO tranporteVO = new TransporteVO();
			tranporteVO.setDireccionDestino(" ");
			tranporteVO.setComunaDestino(" ");
			tranporteVO.setCuidadDestino(" ");
			// Emisor
			//Documento/Encabezado/Emisor
			EmisorVO emisorVo = new EmisorVO();
			emisorVo.setRutEmisor(guiaDatosEnvDTE.getRutEmisor());
			emisorVo.setRazonsocialEmisor(guiaDatosEnvDTE.getRazonSocialEmisor());
			emisorVo.setGiroEmisor(guiaDatosEnvDTE.getGiroEmisor());
			emisorVo.setActeco(guiaDatosEnvDTE.getActecoEmisor());
			emisorVo.setTelefonoEmisor(guiaDatosEnvDTE.getTelefonoEmisor());
			emisorVo.setDireccionEmisor(guiaDatosEnvDTE.getDireccionEmisor());
			emisorVo.setComunaEmisor(guiaDatosEnvDTE.getComunaEmisor());
			emisorVo.setCiudadEmisor(guiaDatosEnvDTE.getCiudadEmisor());
			
			//Totales
			TotalesVO totalesVO = new TotalesVO();
			totalesVO.setTasaIva(guiaDatosEnvDTE.getPorcentajeIVA());
			totalesVO.setIva(guiaDatosEnvDTE.getIva());
			totalesVO.setMontoTotal(guiaDatosEnvDTE.getTotal());
			totalesVO.setMontoNeto(guiaDatosEnvDTE.getNetoTotal());
			totalesVO.setDescuento(guiaDatosEnvDTE.getDescuento());
			
			//observacion		
			ObservacionVO observacionVO = new ObservacionVO();
			observacionVO.setNombre("obs");
			//System.out.println("obs:");
			observacionVO.setTexto(guiaDatosEnvDTE.getObser());
			//System.out.println("Cond.:"+guiaDatosEnvDTE.getObser());
			observacionVO.setCondCompra(guiaDatosEnvDTE.getCondCompra());
			//System.out.println("Nro OC:"+guiaDatosEnvDTE.getNroOC());
			observacionVO.setNroOC(observacionVO.getNroOC());
	
			
			List<DetalleVO> detalleList = new ArrayList<DetalleVO>();
			if (listRetornoDet.size() > 0){					
					for (int i = 0; i < listRetornoDet.size(); i++){
						DocumentoDetalleDTO  docDetalleDTO = (DocumentoDetalleDTO) listRetornoDet.get(i);	
						DetalleVO  detalleVO = new DetalleVO(); 
						detalleVO.setTipoCodigo("INT");
						detalleVO.setValorCodigo(docDetalleDTO.getKinf());
						detalleVO.setDescuentoMonto(docDetalleDTO.getDescuentoMonto());
						detalleVO.setNroLinea(String.valueOf(i));
						detalleVO.setItem(docDetalleDTO.getDescripcion());
						detalleVO.setDscItem(docDetalleDTO.getDescripcionItem());
						detalleVO.setMontoItem(docDetalleDTO.getTotalNeto());
						detalleVO.setQtyItem(docDetalleDTO.getCantidad());
						detalleVO.setPrecioItem(docDetalleDTO.getPrecioListaNeto());								
						detalleList.add(detalleVO);
					}					
			}
			//System.out.println("registros Seteados en detalleList:"+ detalleList.size());
			
			
			
			// System.out.println("3:");
			try {
				if (guiaDatosEnvDTE.getTipoDoc().equals("BEI"))
					resultado = envia.enviaBoleta(encabezadoVO, receptorVO, tranporteVO, totalesVO, observacionVO, emisorVo, detalleList, detalleRefList);
				else
					resultado = envia.enviaGuia(encabezadoVO, receptorVO, tranporteVO, totalesVO, observacionVO, emisorVo, detalleList, detalleRefList);
			 //System.out.println(horaActual+" Resultado envio "+guiaDatosEnvDTE.getTipoDoc()+" "+resultado+"; Folio:"+folioSii);
			} catch (LtException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				resultado = 6;
			}
	   }else{
		   System.out.println(horaActual+" no se puede asociar datos con idDocumento:"+idDocumento+" Folio SII:"+folioSii);
		   resultado = 6;
	   }
			
	  return resultado;
	  
	}
	
	public  List<GuiaDespRptaDTE> getPDFGuia(String idFolio, String tipoDoc){
		ArrayList<GuiaDespRptaDTE> listRetorno = new ArrayList<GuiaDespRptaDTE>();	
		DTEBoxDAO dteDAO = new DTEBoxDAO();
		long folio = Integer.parseInt(idFolio);
		int tipoDTE=0;
		if (tipoDoc.equals("FCI")){
			tipoDTE  = 33;
		}else if (tipoDoc.equals("GDC")){
			tipoDTE  = 52;
		}else if (tipoDoc.equals("FCE")){
			tipoDTE  = 34;
		}else if (tipoDoc.equals("NCC")){
			tipoDTE  = 61;
		}else if (tipoDoc.equals("NDC")){
			tipoDTE  = 56;
		}else if (tipoDoc.equals("BEI")){
			tipoDTE  = 39;
		}
		
		GuiaDespRptaDTE rptaGuia = new GuiaDespRptaDTE();
		if (tipoDTE==0){
			rptaGuia.setGeneradaSN("E");
			
			System.out.println("Error DocumentoElectronicoDAO.getPDFGuia Documento no codificado, revisar línea más arriba ("+tipoDoc+")");
		}else{
			boolean respuesta =  dteDAO.getPDFGuia(folio, tipoDTE);
			
			if (respuesta){		
				 //System.out.println("peticion de la guia efectiva");		
				 rptaGuia.setGeneradaSN("S");
			}else{
				 //System.out.println("aun no esta generara guia en SII para consultar");	
				 rptaGuia.setGeneradaSN("N");
			}
			
		}
		listRetorno.add(rptaGuia);
		return listRetorno;
	}
	
	public  List<DocumentoDteDTO> estadoDocumento(String idFolio, String idDocumento, String tipoDoc) throws MissingResourceException, IOException, SQLException{
		//ArrayList<DocumentoDteDTO> listRetorno = new ArrayList<DocumentoDteDTO>();
		ArrayList<DocumentoDteDTO> listRetorno = new ArrayList<DocumentoDteDTO>();
		try {
			DTEBoxDAO dteDAO = new DTEBoxDAO();
			long folio = Integer.parseInt(idFolio);
			int tipoDTE=0;
			if (tipoDoc.equals("FCI")){
				tipoDTE  = 33;
			}else if (tipoDoc.equals("GDC")){
				tipoDTE  = 52;
			}else if (tipoDoc.equals("FCE")){
				tipoDTE  = 34;
			}else if (tipoDoc.equals("NCC")){
				tipoDTE  = 61;
			}else if (tipoDoc.equals("NDC")){
				tipoDTE  = 56;
			}else if (tipoDoc.equals("BEI")){
				tipoDTE  = 39;
			}

			if (tipoDTE==0){
				System.out.println("Error DocumentoElectronicoDAO.estadoDocumento Documento no codificado, revisar línea más arriba ("+tipoDoc+")");
			}else{

				listRetorno=(ArrayList<DocumentoDteDTO>) dteDAO.testEstadoFiscalDole(folio, tipoDTE);
			}
		} catch (Exception e) {
			// TODO: handle exception
			DocumentoDteDTO dte = new DocumentoDteDTO();
            dte.setIdEstado("-1");
            dte.setIdDocumento("error");
            dte.setEstado("error");
            listRetorno.add(dte);
	
		} finally {
			Connection conn = ConexionPool.getConnectionPool();	
			try {
				String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.setEstadoDocumentoSII(?,?,?) }"; 	       
				CallableStatement  stmt = conn.prepareCall(query);			
				stmt.setString(1, idDocumento);	
				stmt.setString(2, Integer.toString((Integer.parseInt(listRetorno.get(0).getIdEstado())+10)));	
				//System.out.println(horaActual+" idDocumento:"+idDocumento+"; idEstado:"+Integer.toString((Integer.parseInt(listRetorno.get(0).getIdEstado())+10)));
				stmt.registerOutParameter(3, OracleTypes.CURSOR);
				stmt.execute();
				ResultSet rs = (ResultSet)stmt.getObject(3);
				rs.close();
				stmt.close();

			} catch (SQLException ex) {  
				log.error("Error DocumentoElectronicoDAO.setEnviarGuia SQLException: " +ex.getMessage());
				System.out.println(ex.getMessage());
			} finally {			
				conn.close();
				conn = null;
			}			
		}
		return listRetorno;
	
	}
	
	public  int setDocumentoAnula(String idDocumento) throws MissingResourceException, IOException, SQLException{
		int retorno=9;	
		Connection conn = ConexionPool.getConnectionPool();
		try {
		
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.setDocumentosAnula(?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);			
			stmt.setString(1, idDocumento);		
			stmt.registerOutParameter(2, OracleTypes.INTEGER);
			stmt.execute();
			stmt.close();
			System.out.println(retorno);
		} catch (SQLException ex) {  
			log.error(horaActual+" Error PKG_FAR_GUIA_DESPACHO_2.setDocumentosAnula SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {			
			conn.close();
			conn = null;
		}
		
		
	 return retorno;	
	}
	
	public  List<DocumentoDteDTO> setDocumentoBoleta(String folioKdoc, String idUser) throws MissingResourceException, IOException, SQLException{
			
		Connection conn = ConexionPool.getConnectionPool();
		List<DocumentoDteDTO> listRetorno = new ArrayList<DocumentoDteDTO>();
		try {
		
			String query = "{ call "+pkgVar+".PKG_FAR_GUIA_DESPACHO_2.setDocumentoBoleta(?,?,?) }"; 	       
			CallableStatement  stmt = conn.prepareCall(query);			
			stmt.setString(1, folioKdoc);
			stmt.setString(2, idUser);
			stmt.registerOutParameter(3, OracleTypes.CURSOR);
			stmt.execute();
			ResultSet rs = (ResultSet)stmt.getObject(3);
			while (rs.next()) {
				DocumentoDteDTO documDTO = new DocumentoDteDTO();
				documDTO.setIdDocumento(rs.getString(2)); 		
				documDTO.setSii(rs.getString(3)); 		
				listRetorno.add(documDTO);		    	
			}
			
			stmt.close();
			
		} catch (SQLException ex) {  
			log.error(horaActual+" Error PKG_FAR_GUIA_DESPACHO_2.setDocumentoBoleta SQLException: " +ex.getMessage());
			System.out.println(ex.getMessage());
		} finally {			
			conn.close();
			conn = null;
		}
		
		
	 return listRetorno;	
	}

	
}
